//package com.zmn.plat.admin.config;
//
//import com.alibaba.fastjson.serializer.SerializerFeature;
//import com.alibaba.fastjson.support.config.FastJsonConfig;
//import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
//import com.google.common.collect.Lists;
//import com.zmn.plat.admin.interceptor.HttpRequestInterceptor;
//import org.springframework.boot.actuate.endpoint.http.ActuatorMediaType;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.http.CacheControl;
//import org.springframework.http.MediaType;
//import org.springframework.http.converter.HttpMessageConverter;
//import org.springframework.web.servlet.config.annotation.*;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.TimeUnit;
//
///**
// * ViewResolver配置
// *
// * @uthor nowind
// * @since 2018/9/17 11:41
// */
//@Configuration
//public class SpringMvcConfig extends WebMvcConfigurationSupport {
//
//    /**
//     * 页面匹配模式
//     * setUseSuffixPatternMatch: 设置是否是后缀模式匹配，如“/user”是否匹配/user.*，默认真即匹配，为true时，/user.html、/user.aa、/user.* 都能访问；
//     * setUseTrailingSlashMatch: 设置是否自动后缀路径模式匹配，如“/user”是否匹配“/user/”，默认真即匹配，为true时，/user、/user/ 都能访问；
//     *
//     * @param configurer
//     */
//    @Override
//    public void configurePathMatch(PathMatchConfigurer configurer) {
//        configurer.setUseSuffixPatternMatch(true)
//                .setUseTrailingSlashMatch(true);
//    }
//
//    /**
//     * 静态资源映射
//     * addResourceHandler指的是访问路径，addResourceLocations指的是文件放置的目录
//     *
//     * @param registry
//     */
//    @Override
//    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        registry.addResourceHandler("/static/**")
//                .addResourceLocations("classpath:/static/", "classpath:/template/")
//                .setCacheControl(CacheControl.maxAge(5, TimeUnit.SECONDS).cachePublic());
//    }
//
////    @Override
////    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
////        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
////        converters.add(converter);
////    }
//
//    @Override
//    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//        ArrayList<MediaType> supportedMediaTypes = Lists.newArrayListWithExpectedSize(2);
//        supportedMediaTypes.add(MediaType.APPLICATION_JSON);
//        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//
//        // actuator/health
//        supportedMediaTypes.add(MediaType.parseMediaType(ActuatorMediaType.V1_JSON));
//        supportedMediaTypes.add(MediaType.parseMediaType(ActuatorMediaType.V2_JSON));
//
//        fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
//
//        FastJsonConfig fastJsonConfig = new FastJsonConfig();
//        fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
//        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
//
//        converters.set(7,fastJsonHttpMessageConverter);
//    }
//
//    /**
//     * 拦截器：跨域
//     *
//     * @return
//     */
//    @Bean
//    HttpRequestInterceptor httpRequestInterceptor() {
//        return new HttpRequestInterceptor();
//    }
//
//    /**
//     * 添加拦截器：跨域
//     *
//     * @param registry
//     */
//    @Override
//    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(httpRequestInterceptor());
//    }
//
//    @Bean
//    public WebMvcConfigurer corsConfigurer() {
//        return new WebMvcConfigurer() {
//            @Override
//            public void addCorsMappings(CorsRegistry registry) {
//                registry.addMapping("/api/**")           // 配置支持跨域的路径
//                        .allowedOrigins("*")                    // 配置允许的源
//                        .allowedMethods("GET", "POST", "PUT","PATCH") // 配置支持跨域请求的方法，如：GET、POST，一次性返回
//                        .allowedHeaders("header")    // 配置允许的自定义请求头，用于预检请求
//                        .exposedHeaders("header")   // 配置响应的头信息，在其中可以设置其他的头信息
//                        .allowCredentials(true)                 // 配置是否允许发送Cookie，用于 凭证请求
//                        .maxAge(3600);  // 配置预检请求的有效时间
//            }
//        };
//    }
//}
